#ifndef IGRAYSCALEPROCESSOR_H
#define IGRAYSCALEPROCESSOR_H

#include <opencv2/opencv.hpp>
#include <tuple>
#include <vector>
#include <string>

class IGrayScaleProcessor {
public:
  /**
   *
   * 获取灰度图的数组表示及相关统计信息。
   *
   * @param
   *        image 输入的灰度图像 (cv::Mat格式)。
   *              - 图像应为单通道灰度图。
   *              - 将从该图像中提取灰度值并生成统计数据。
   *
   *        int: 通道选择框的起始 X
   *        int: 通道选择框的起始 Y
   *        int: 通道宽 width
   *        int: 通道高 height

   * @return 返回一个包含以下内容的元组：
   *         - std::string: 返回信息：
   *                    - msg 成功：Success 失败：返回具体的异常信息
   *         - std::string: 测试结果标识：
   *                    - tcResult 如"Positive"
   *         - std::vector<double>: 灰度图的数据
   * (grayValues)，表示图像中每列的灰度值。 每个元素对应图像中某一行的灰度值。
   *         - int: C位置 (cPosition)，表示灰度值曲线中某个特定参考点的X坐标。
   *                - 通常用于标记感兴趣区域或关键点。
   *         - int: T位置 (tPosition)，表示另一个参考点的X坐标，与C位置相对应。
   *                - 可用于比较或计算比例关系。
   *         - double: C值 (cValue)，表示C位置对应的灰度值。
   *                   - 提供C位置的具体灰度数值。
   *         - double: T值 (tValue)，表示T位置对应的灰度值。
   *                   - 提供T位置的具体灰度数值。
   *         - double: T/C比值 (tOverC)，表示T值与C值的比例关系。
   *                   - 计算公式为 tValue / cValue，用于量化两者之间的差异。
   *
   */
  virtual std::tuple<std::string,std::string,std::vector<double>, int, int, double, double, double>
  GetGrayScaleArray(const cv::Mat &image, int x, int y, int width,
                    int height) = 0;

  virtual ~IGrayScaleProcessor() = default;
};

#endif // IGRAYSCALEPROCESSOR_H
